/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package datos;

import dominio.Especialidad;
import dominio.Subarea;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import javax.swing.DefaultListModel;
import javax.swing.JComboBox;
import javax.swing.JList;

/**
 *
 * @author Richard
 */
public class EspecialidadDatos {

    public EspecialidadDatos() {
    }
    
    public LinkedList<Especialidad> getEspecialidades() throws SQLException {
        LinkedList<Especialidad> especialidades = new LinkedList<Especialidad>();
        Connection con = null;
        try {
            con = BaseDeDatos.getConexion();
            Statement stmt = con.createStatement();
            String slctAsignaturasAcademicas = "SELECT idEspecialidad,nombreEspecialidad "
                    + "FROM especialidad";
            ResultSet rs = stmt.executeQuery(slctAsignaturasAcademicas);
            while (rs.next() == true) {
                Especialidad especialidad=new Especialidad();
                especialidad.setIdEspecialidad(rs.getInt(1));
                especialidad.setNombreEspecialidad(rs.getString(2));
                especialidades.addLast(especialidad);
            }
        } catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage());
        } finally {
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
        }
        
        return especialidades;
    }
    
    public void ingresarEspecialidad(Especialidad especialidad) throws SQLException {
        Connection con = BaseDeDatos.getConexion();
        CallableStatement cs = null;
        try {
            cs = con.prepareCall("{call sproc_ingresar_especialidad(?)}");
            cs.setString(1, especialidad.getNombreEspecialidad());
            cs.execute();
        } catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage());
        } finally {
            if (cs != null) {
                try {
                    cs.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
        }
    }//Fin ingresarEspecialidad

    public void modificarEspecialidad(Especialidad especialidad) throws SQLException {
        Connection con = BaseDeDatos.getConexion();
        try {
            System.out.println("Entro al modificar "+especialidad.getNombreEspecialidad()+" ,"+especialidad.getIdEspecialidad());
            String query = "update especialidad set nombreEspecialidad='"+especialidad.getNombreEspecialidad()+"' where idEspecialidad="+especialidad.getIdEspecialidad()+";";
            PreparedStatement stm = con.prepareStatement(query);        
            stm.executeUpdate();
        } catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage());
        } finally {            
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
        }
    }//Fin modificarEspecialidad

    public void eliminarEspecialidad(Especialidad especialidad) throws SQLException {
        Connection con = BaseDeDatos.getConexion();
        CallableStatement cs = null;
        try {
            cs = con.prepareCall("{call sproc_eliminar_especialidad(?)}");
            cs.setInt(1, especialidad.getIdEspecialidad());
            cs.execute();
        } catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage());
        } finally {
            if (cs != null) {
                try {
                    cs.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
        }
    }//Fin eliminarEspecialidad

    public void EspecialidadSubarea(Especialidad especialidad) throws SQLException {
        Connection con = BaseDeDatos.getConexion();
        Statement stmt = con.createStatement();
        LinkedList<Subarea> subareas = new LinkedList<Subarea>();
        String consul="select s.nivel,s.sigla from subarea as s,subarea_especialidad as se where "
                + "s.sigla=se.sigla and se.idEspecialidad="+especialidad.getIdEspecialidad()+";";
        try {
                ResultSet rs = stmt.executeQuery(consul);
            while (rs.next() == true) {
                Subarea subarea=new Subarea();
                subarea.setSigla(rs.getString(2));
                subarea.setNivel(rs.getInt(1));
            }          

        } catch (SQLException e) {
            System.err.println("SQLException: " + e.getMessage());
        } finally {
            if (con != null) {
                try {
                    con.close();
                } catch (SQLException e) {
                    System.err.println("SQLException: " + e.getMessage());
                }
            }
        }
    }//Fin EspecialidadSubarea
    
    public Especialidad buscaEspecialidad(Especialidad especialidad) throws SQLException{
        Connection con = BaseDeDatos.getConexion();
        Statement stmt = con.createStatement();
            String slctAsignaturasAcademicas = "SELECT idEspecialidad, nombreEspecialidad"
                    + " FROM especialidad WHERE idEspecialidad=" + especialidad.getIdEspecialidad() + ";";
            ResultSet rs = stmt.executeQuery(slctAsignaturasAcademicas);
            rs.next();
            especialidad.setIdEspecialidad(rs.getInt(1));
            especialidad.setNombreEspecialidad(rs.getString(2));
            
            EspecialidadSubarea(especialidad);
            
            
            return especialidad;
            
            
            
    }
    
}